@echo off
chcp 65001 > nul
rem ========================================
rem 若依运销系统启动脚本
rem 功能: 启动Spring Boot应用jar包
rem 作者: System Admin
rem 日期: 2025-10-11
rem ========================================

rem 设置控制台标题
title 若依运销系统 - 启动中...

rem 设置控制台颜色 (0A = 黑底绿字)
color 0A

echo.
echo ========================================
echo          若依运销系统启动脚本
echo ========================================
echo.

rem 检查Java环境
echo [信息] 检查Java运行环境...
java -version
if %errorlevel% neq 0 (
    echo [错误] 未找到Java运行环境，请确保已安装JDK/JRE并配置环境变量
    pause
    exit /b 1
)

rem 设置项目根目录
set PROJECT_HOME=%~dp0
echo [信息] 项目根目录: %PROJECT_HOME%

rem 设置jar包路径
set JAR_FILE=%PROJECT_HOME%ruoyi-admin\target\ruoyi-admin.jar

rem 检查jar包是否存在
if not exist "%JAR_FILE%" (
    echo [错误] jar包不存在: %JAR_FILE%
    echo [提示] 请先执行 mvn clean package 编译项目
    pause
    exit /b 1
)

rem 设置日志目录
set LOG_DIR=%PROJECT_HOME%logs
if not exist "%LOG_DIR%" (
    mkdir "%LOG_DIR%"
    echo [信息] 创建日志目录: %LOG_DIR%
)

rem 设置日志文件名（包含时间戳）
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do set DATE_STR=%%a-%%b-%%c
for /f "tokens=1-2 delims=: " %%a in ('time /t') do set TIME_STR=%%a-%%b
set LOG_FILE=%LOG_DIR%\ruoyi-%DATE_STR%_%TIME_STR%.log

rem JVM参数配置
rem -Xms: 初始堆内存大小
rem -Xmx: 最大堆内存大小  
rem -XX:MetaspaceSize: 元空间初始大小
rem -XX:MaxMetaspaceSize: 元空间最大大小
rem -XX:+UseG1GC: 使用G1垃圾收集器
rem -XX:MaxGCPauseMillis: GC最大暂停时间
rem -server: 服务器模式
set JVM_OPTS=-server
set JVM_OPTS=%JVM_OPTS% -Xms512m
set JVM_OPTS=%JVM_OPTS% -Xmx1024m
set JVM_OPTS=%JVM_OPTS% -XX:MetaspaceSize=128m
set JVM_OPTS=%JVM_OPTS% -XX:MaxMetaspaceSize=256m
set JVM_OPTS=%JVM_OPTS% -XX:+UseG1GC
set JVM_OPTS=%JVM_OPTS% -XX:MaxGCPauseMillis=200
set JVM_OPTS=%JVM_OPTS% -XX:+HeapDumpOnOutOfMemoryError
set JVM_OPTS=%JVM_OPTS% -XX:HeapDumpPath=%LOG_DIR%

rem 应用参数配置
rem --spring.profiles.active: 指定激活的配置文件
rem --server.port: 指定服务端口
rem --logging.file.path: 指定日志文件路径
set APP_OPTS=--spring.profiles.active=prod
set APP_OPTS=%APP_OPTS% --server.port=8080
set APP_OPTS=%APP_OPTS% --logging.file.path=%LOG_DIR%

rem 显示启动信息
echo [信息] jar包路径: %JAR_FILE%
echo [信息] 日志目录: %LOG_DIR%
echo [信息] 日志文件: %LOG_FILE%
echo [信息] JVM参数: %JVM_OPTS%
echo [信息] 应用参数: %APP_OPTS%
echo.

rem 更新控制台标题
title 若依运销系统 - 运行中 (PID: %JAVA_PID%)

echo [信息] 正在启动若依运销系统...
echo [信息] 请等待应用完全启动...
echo [提示] 启动完成后可访问: http://localhost:8080
echo [提示] 按 Ctrl+C 可停止应用
echo.
echo ========================================
echo              启动日志输出
echo ========================================

rem 启动应用并输出日志
rem 使用 2>&1 将错误输出重定向到标准输出
rem 使用 tee 命令同时输出到控制台和日志文件（如果系统支持）
java %JVM_OPTS% -jar "%JAR_FILE%" %APP_OPTS% 2>&1 | tee "%LOG_FILE%"

rem 如果系统不支持tee命令，使用以下方式
rem java %JVM_OPTS% -jar "%JAR_FILE%" %APP_OPTS% > "%LOG_FILE%" 2>&1

rem 检查应用退出状态
if %errorlevel% equ 0 (
    echo.
    echo [信息] 应用正常退出
) else (
    echo.
    echo [错误] 应用异常退出，错误代码: %errorlevel%
    echo [提示] 请查看日志文件: %LOG_FILE%
)

echo.
echo ========================================
echo              启动脚本结束
echo ========================================
pause